 /*
   进制求和
   题目描述
     给你 n 个各种进制下表示的整数，现在你需要求和。
   输入
    第一行为两个数 n, k，其中 k 为最后输出的答案的进制。
    以下每一行首先为一个数 p，即当前整数的进制。然后是一个 p 进制整数。p 进制中出现的字母均为大写。
  输出
    最后求出来的和在 k 进制下的表示。
  样例输入
    5 2
    12 A
    6 43
    6 14
    2 111
    15 1
  样例输出
    110111
  提示
    n ≤ 100，所有数均为 2 ∼ 16 进制的其中一种。
    且保证最后结果在十进制下可以用 int 类型表示。
 */

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    int k;
    string si1;
    int x1;

    cin >> n >> k;

    // 将 n 个数分别转换成 10 进制数，并求这 n 个数的和 (num)
    long long num = 0;
    for (int i = 1; i <= n; i++) {
        cin >> x1;   // p 进制
        cin >> si1;  // p 进制数

        /******************************************/
        /*  将 p 进制数(字符串)转换成 10 进制数     */
        /*  方法:
        /*    1). 求每一位上的数 * 该位的权重 的结果 */
        /*    2). 对第 1)步得到的结果累加           */
        /******************************************/
        int j = 0;
        for (int i = si1.size() - 1; i >= 0; i--) {
            if (si1[i] >= 'A' && si1[i] <= 'Z') {
                int x = si1[i]-'A' + 10;
                num = num + x * pow(x1, j);
            } else {
                int x= si1[i] - '0';
                num = num + x * pow(x1, j);
            }
            j++;
        }
    }

    /******************************************/
    /*  将 10 进制数 num 转换成 k 进制数(字符串) */
    /*  方法: "除基数取余法"                    */
    /******************************************/
    string s;
    while (num != 0) {
        int xi = num % k;
        num = num / k;
        char c;

        if (xi <= 9) {
            c = xi + '0';
            s = c + s;
        } else {
            xi = xi % 10;
            c = 'A' + xi;
            s = c + s;
        }
    }
    cout << s;

    return 0;
}